78d6d6ca0640149bb10645ac142f05dd3bb90794,htroot/api/ymarks/get_xbel.java,get_xbel,respond,#RequestHeader#serverObjects#serverSwitch#,22

Before Change


            		    		count++;  	
            	    		} else {
            					alias.add(urlHash);
            	    			bmk_row = sb.tables.select(YMarkTables.TABLES.BOOKMARKS.tablename(bmk_user), urlHash.getBytes());
            		        	if(bmk_row != null) {
            		        		buffer.setLength(0);
            		        		
            		        		buffer.append(YMarksXBELImporter.XBEL.BOOKMARK.startTag(true));
            		        		buffer.append(" id=\"b:");
            		        		buffer.append(urlHash);
            		        		
            		        		buffer.append(YMarkTables.BOOKMARK.URL.xbel());
            		        		buffer.append(CharacterCoding.unicode2xml(bmk_row.get(YMarkTables.BOOKMARK.URL.key(), YMarkTables.BOOKMARK.URL.deflt()), true));
            		        		
            		        		buffer.append(YMarkTables.BOOKMARK.DATE_ADDED.xbel());
            		        		buffer.append(CharacterCoding.unicode2xml(YMarkTables.getISO8601(bmk_row.get(YMarkTables.BOOKMARK.DATE_ADDED.key())), true));
            		        		
            		        		buffer.append(YMarkTables.BOOKMARK.DATE_MODIFIED.xbel());
            		        		buffer.append(CharacterCoding.unicode2xml(YMarkTables.getISO8601(bmk_row.get(YMarkTables.BOOKMARK.DATE_MODIFIED.key())), true));
            		        		
            		        		buffer.append(YMarkTables.BOOKMARK.DATE_VISITED.xbel());
            		        		buffer.append(CharacterCoding.unicode2xml(YMarkTables.getISO8601(bmk_row.get(YMarkTables.BOOKMARK.DATE_VISITED.key())), true));

After Change


		final Switchboard sb = (Switchboard) env;
		final serverObjects prop = new serverObjects();        
		final HashSet<String> alias = new HashSet<String>();
		final StringBuilder buffer = new StringBuilder(250);
		final UserDB.Entry user = sb.userDB.getUser(header);
        final boolean isAdmin = (sb.verifyAuthentication(header, true));
        final boolean isAuthUser = user!= null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT);
		final String bmk_user;
        
        if(isAdmin || isAuthUser) {
        	bmk_user = (isAuthUser ? user.getUserName() : YMarkTables.USER_ADMIN);
        	
        	String root = YMarkTables.FOLDERS_ROOT;  	
        	String[] foldername = null;
        	
        	// TODO: better handling of query
        	if (post != null){
        		if (post.containsKey(ROOT)) {
            		if (post.get(ROOT).equals(SOURCE) || post.get(ROOT).equals(YMarkTables.FOLDERS_ROOT)) {
            			root = "";
            		} else if (post.get(ROOT).startsWith(YMarkTables.FOLDERS_ROOT)) {
            			root = post.get(ROOT);
            		} else {
            			root = "";            			
            		}
        		}
        	} else {
        		root = "";
        	}
        	
        	final int root_depth = root.split(YMarkUtil.FOLDERS_SEPARATOR).length;
    		Iterator<String> fit = null;
        	Iterator<Tables.Row> bit = null;
        	int count = 0;    		
        	int n = root_depth;
        	
        	try {
				// fit = sb.tables.bookmarks.folders.getFolders(bmk_user, root);
        		fit = sb.tables.bookmarks.getFolders(bmk_user, root).iterator();
			} catch (IOException e) {
				Log.logException(e);
			}

			Log.logInfo(YMarkTables.BOOKMARKS_LOG, "root: "+root+" root_deph: "+root_depth);
			
			while (fit.hasNext()) {    		   		
        		String folder = fit.next();
        		foldername = folder.split(YMarkUtil.FOLDERS_SEPARATOR); 
        		if (n != root_depth && foldername.length <= n) {
					prop.put("xbel_"+count+"_elements", "</folder>");
            		count++;
        		}
        		if (foldername.length >= n) {
        			n = foldername.length;
        			if(n != root_depth) {
                		prop.put("xbel_"+count+"_elements", "<folder id=\"f:"+UTF8.String(YMarkUtil.getKeyId(foldername[n-1]))+"\">");
                		count++;
                		prop.put("xbel_"+count+"_elements", "<title>" + CharacterCoding.unicode2xml(foldername[n-1], true) + "</title>");   		
                		count++;	
        			}
            		// bit = sb.tables.bookmarks.folders.getBookmarkIds(bmk_user, folder).iterator();
					try {
						bit = sb.tables.bookmarks.getBookmarksByFolder(bmk_user, folder);
					} catch (IOException e) {
						// TODO: better error handling (avoid NPE)
						bit = null;
					}
					Tables.Row bmk_row = null;
					String urlHash;
					final YMarkDate date = new YMarkDate();
					while(bit.hasNext()){			
						// urlHash = bit.next();
						bmk_row = bit.next();
						urlHash = new String(bmk_row.getPK());
						
						if(alias.contains(urlHash)) {
							buffer.setLength(0);
							buffer.append(YMarkXBELImporter.XBEL.ALIAS.startTag(true));
							buffer.append(" ref=\"b:");
							buffer.append(urlHash);
							buffer.append("\"/>");            	    			
							prop.put("xbel_"+count+"_elements", buffer.toString()); 		
							count++;  	
						} else {
							alias.add(urlHash);
							// bmk_row = sb.tables.select(YMarkTables.TABLES.BOOKMARKS.tablename(bmk_user), urlHash.getBytes());
					    	if(bmk_row != null) {
					    		buffer.setLength(0);
					    		
					    		buffer.append(YMarkXBELImporter.XBEL.BOOKMARK.startTag(true));
					    		buffer.append(" id=\"b:");
					    		buffer.append(urlHash);
					    		
					    		buffer.append(YMarkTables.BOOKMARK.URL.xbel());
					    		buffer.append(CharacterCoding.unicode2xml(bmk_row.get(YMarkTables.BOOKMARK.URL.key(), YMarkTables.BOOKMARK.URL.deflt()), true));
					    		
					    		buffer.append(YMarkTables.BOOKMARK.DATE_ADDED.xbel());
					    		date.set(bmk_row.get(YMarkTables.BOOKMARK.DATE_ADDED.key()));
					    		buffer.append(CharacterCoding.unicode2xml(date.toISO8601(), true));
					    		
					    		buffer.append(YMarkTables.BOOKMARK.DATE_MODIFIED.xbel());
					    		date.set(bmk_row.get(YMarkTables.BOOKMARK.DATE_MODIFIED.key()));
					    		buffer.append(CharacterCoding.unicode2xml(date.toISO8601(), true));
					    		
					    		buffer.append(YMarkTables.BOOKMARK.DATE_VISITED.xbel());
					    		date.set(bmk_row.get(YMarkTables.BOOKMARK.DATE_VISITED.key()));
					    		buffer.append(CharacterCoding.unicode2xml(date.toISO8601(), true));
					    		
					    		buffer.append(YMarkTables.BOOKMARK.TAGS.xbel());
					    		buffer.append(bmk_row.get(YMarkTables.BOOKMARK.TAGS.key(), YMarkTables.BOOKMARK.TAGS.deflt()));